import { IPSDETree, IPSAppDataEntity, IPSAppDEField, IPSAppDERS } from '@ibizstudio/runtime';

/**
 *  树视图部件模型
 *
 * @export
 * @class AppTreeModel
 */
export class AppTreeModel {
  /**
   * 表单实例对象
   *
   * @memberof AppTreeModel
   */
  TreeInstance!: IPSDETree;

  /**
   * Creates an instance of AppTreeModel.
   *
   * @param {*} [opts={}]
   * @memberof AppTreeModel
   */
  constructor(opts: any) {
    this.TreeInstance = opts;
  }

  /**
   * 获取数据项集合
   *
   * @returns {any[]}
   * @memberof AppTreeModel
   */
  getDataItems(): any[] {
    let modelArray: any[] = [];
    const appDataEntity = this.TreeInstance.getPSAppDataEntity();
    // 主实体所有属性
    let allAppDeFields = appDataEntity?.getAllPSAppDEFields() || [];
    if (allAppDeFields.length > 0) {
      allAppDeFields.forEach((field: IPSAppDEField) => {
        let obj: any = {};
        if (field.keyField) {
          obj.name = appDataEntity?.codeName.toLowerCase();
          obj.prop = field.codeName.toLowerCase();
        } else {
          obj.name = field.codeName.toLowerCase();
        }
        modelArray.push(obj);
      });
    }

    // 关联主实体的主键（todo 需要加载关系实体json数据）
    if (appDataEntity?.major == false) {
      let minorPSAppDERSs = appDataEntity.getMinorPSAppDERSs() || [];
      if (minorPSAppDERSs.length > 0) {
        minorPSAppDERSs.forEach((minorAppDERSs: IPSAppDERS) => {
          if (minorAppDERSs.getMajorPSAppDataEntity()) {
            const majorAppDataEntity = minorAppDERSs.getMajorPSAppDataEntity();
            let obj: any = {
              name: majorAppDataEntity?.codeName.toLowerCase(),
              dataType: 'FRONTKEY',
            };
            if (majorAppDataEntity?.getPSDER1N()) {
              obj.prop = majorAppDataEntity?.getPSDER1N()?.pickupDEFName.toLowerCase();
            }
            modelArray.push(obj);
          }
        });
      }
    }

    return modelArray;
  }
}
